/**
 * @file RobotSensorEvt.h
 * @author  
 * @brief 定义机器人传感器触发数据
 * @version 1.0
 * @date 2020-07-29
 * 
 * @copyright Copyright (c) 2020
 * 
 */

#pragma once
#include "data_struct/base/EventBase.h"
#include "data_struct/robot/BumperData.h"
#include "data_struct/robot/CliffData.h"
#include "data_struct/robot/HallSensorData.h"
#include "data_struct/robot/ImuData.h"
#include "data_struct/robot/IrData.h"
#include "data_struct/robot/LaserData.h"
#include "data_struct/robot/MarginSensorData.h"
#include "data_struct/robot/MotorData.h"

namespace behavior_controller
{
    namespace evt
    {
        /**
         * @brief 碰撞传感器触发事件定义
         * 
         */
        class Bumper : public EventBase<Bumper>,
                       public EventData<BumperData>
        {
        public:
            explicit Bumper(const BumperData &_data) : EventData(_data){};
        };

        /**
         * @brief 探地传感器触发事件定义
         * 
         */
        class Cliff : public EventBase<Cliff>,
                      public EventData<CliffData>
        {
        public:
            explicit Cliff(const CliffData &_data) : EventData(_data){};
        };

        /**
         * @brief IMU传感器触发事件定义
         * 
         */
        class Imu : public EventBase<Imu>,
                    public EventData<ImuData>
        {
        public:
            explicit Imu(const ImuData &_data) : EventData(_data){};
        };

        /**
         * @brief 红外传感器触发事件定义
         * 
         */
        class Ir : public EventBase<Ir>,
                   public EventData<IrData>
        {
        public:
            explicit Ir(const IrData &_data) : EventData(_data){};
        };

        /**
         * @brief 霍尔传感器触发事件定义
         * 
         */
        class HallSensor : public EventBase<HallSensor>,
                           public EventData<HallSensorData>
        {
        public:
            explicit HallSensor(const HallSensorData &_data) : EventData(_data){};
        };

        /**
         * @brief 马达数据更新事件定义
         * 
         */
        class Motor : public EventBase<Motor>,
                      public EventData<MotorData>
        {
        public:
            explicit Motor(const MotorData &_data) : EventData(_data){};
        };

        /**
         * @brief 沿边传感器触发事件定义
         * 
         */
        class MarginSensor : public EventBase<MarginSensor>,
                             public EventData<MarginSensorData>
        {
        public:
            explicit MarginSensor(const MarginSensorData &_data) : EventData(_data){};
        };

        /**
         * @brief 激光雷达数据更新事件定义
         * 
         */
        class Laser : public EventBase<Laser>,
                      public EventData<LaserData>
        {
        public:
            explicit Laser(const LaserData &_data) : EventData(_data){};
        };

    } // namespace evt
} // namespace behavior_controller